Current computing systems often comprise a central processing unit (CPU) and a graphics processor unit (GPU), which may also be referred to as a video processing unit (VPU). GPUs are processors which have a highly parallel structure and which are typically used for graphics operations such as texture mapping and rendering polygons. Graphics commands are sent from the CPU to the GPU (via a GPU driver) and are executed on the GPU.
In many situations, the CPU may run a number of virtual machines (VMs) which each run an operating system (e.g. where the operating systems running on different VMs may be the same or different). The VMs are created and supervised by software which is called a hypervisor (or virtual machine monitor, VMM) and which controls each VM's access to the hardware within a computing system. Consequently, communications between the operating systems (running on the VMs) and the GPU often go through the hypervisor which is responsible for enforcing security.
The embodiments described below are provided by way of example only and are not limiting of implementations which solve any or all of the disadvantages of known methods of virtualizing GPUs.